#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int unval;
int gval = 100;

int main()
{
   printf("code addr: %p\n", main);
   printf("gval addr: %p\n", &gval);
   printf("unval addr: %p\n", &unval);

   int* mem = (int*)malloc(10 * sizeof(int));
   printf("heap addr: %p\n", mem);

   int a,b,c;
   printf("stack addr: %p\n", &a);
   printf("stack addr: %p\n", &b);
   printf("stack addr: %p\n", &c);

  //  printf("我是一个进程，pid: %d, ppid: %d\n", getpid(), getppid());

  //  pid_t id = fork();

  //  if (id == 0)
  //  {
  //      // child
  //      while (1)
  //      {
  //          printf("我是子进程，pid: %d, ppid: %d, gval: %d, &gval: %p\n", getpid(), getppid(), gval, &gval);
  //          gval++;
  //          sleep(1);
  //      }
  //  }
  //  else
  //  {
  //      // parent
  //      while (1)
  //      {
  //          printf("我是父进程，pid: %d, ppid: %d, gval: %d, &gval: %p\n", getpid(), getppid(), gval, &gval);
  //          sleep(1);
  //      }
  //  }
}

































//extern char** environ;
//
//int main()
//{
//    for (int i = 0; environ[i]; i++)
//    {
//        printf("%s\n", environ[i]);
//    }
//
//    //char* isrunning = getenv("ISRUNNING");
//    //printf("ISRUNNING=%s\n", isrunning);
//
//    //if (isrunning == NULL)
//    //{
//    //    while (1)
//    //    {
//    //        printf("当前进程首次启动！\n");
//    //        sleep(1);
//    //    }
//    //}
//    //else
//    //{
//    //    printf("当前进程已经运行了，不要再启动了！\n");
//    //}
//
//
//
//    // 我可以让我的程序，识别用户身份，只让gsm用户进行访问
//    //const char* who = getenv("USER");
//
//    //if (strcmp(who, "gsm") == 0)
//    //{
//    //    printf("执行程序的正常命令！\n");
//    //    return 0;
//    //}
//    //else
//    //{
//    //    printf("无权访问！\n");
//    //    return 1;
//    //}
//
//
//    //printf("User:%s\n", getenv("USER"));
//    //printf("%s\n", getenv("PWD"));
//
//    return 0;
//}
